#include <stdio.h>
 
int main ()
{
    int  var;
    int  *ptr;
    int  **pptr; // 指向指针的指针必须这样定义

    var = 3000;

    /* 获取 var 的地址 */
    ptr = &var;
    // ptr = 2000; 这样再度赋值依然报错,不可以这样赋值
    *ptr = 2000;  // 这样虽然能赋值，但其实是改变了内存地址的值，也就是是对 var 的内存地址进行赋值

    /* 使用运算符 & 获取 ptr 的地址 */
    pptr = &ptr;

    /* 使用 pptr 获取值 */
    printf("Value of var = %d\n", var );
    printf("Value available at *ptr = %d\n", *ptr );
    printf("Value available at *ptr 0 = %d\n", ptr[0] ); // 这样可以取出指针变量里面的值
    ptr[0] = 123;
    printf("Value available at *ptr 1 = %d\n", ptr[1] ); // 这样可以取出当前指针变量指定地址的下一个地址内的值
    printf("Value available at *ptr = %p\n", ptr );
    printf("Value available at *ptr = %p\n", &ptr[1] );
    printf("Value available at **pptr = %d\n", **pptr);
    printf("Value available at var = %d\n", var);

    // printf("Value available at pptr = %d\n", pptr);

    return 0;
}